﻿using System;
using System.Collections.Generic;
using System.Linq;
using AbcCorp.DTO;
using DAO.EntityModel;

namespace AbcCorp.DAO
{
    public class OrderDao
    {
        #region Variable
        /// <summary>
        /// Khai báo tượng entity model
        /// </summary>
        private readonly ABCCorpEntities _abcCorpEntities = new ABCCorpEntities();
        #endregion

        #region Methods

        /// <summary>
        /// Lấy thông tin đơn hàng dựa vào mã đơn hàng
        /// </summary>
        /// <param name="orderid">Mã đơn hàng</param>
        public OrderDto GetOrder(int orderid)
        {
            var orderinfo = from ord in _abcCorpEntities.Orders.Where(o => o.OrderID.Equals(orderid))
                        select ord;
            var order = orderinfo.SingleOrDefault();
            if (order == null)
            {
                return null;
            }
            var orderdto = new OrderDto();
            CopyObject<Order, OrderDto>.CopyProperties(order, orderdto);
            return orderdto;
        }

        /// <summary>
        /// Lấy toàn bộ danh sách đơn hàng
        /// </summary>
        public IList<OrderDto> GetOrders()
        {
            IList<OrderDto> lstOrders = new List<OrderDto>();
            var orders = from order in _abcCorpEntities.Orders
                         select order;
            if (orders.FirstOrDefault() == null) return null;

            foreach (var order in orders)
            {
                var orderDto = new OrderDto();
                CopyObject<Order, OrderDto>.CopyProperties(order, orderDto); 
                lstOrders.Add(orderDto);
            }
            return lstOrders;
        }

        /// <summary>
        /// Thêm đơn hàng (đặt hàng)
        /// </summary>
        /// <param name="newOrder">Đối tượng đơn hàng mới</param>
        public bool AddOrder(OrderDto newOrder)
        {
            var order = new Order();
            CopyObject<OrderDto, Order>.CopyProperties(newOrder, order);
            _abcCorpEntities.Orders.AddObject(order);
            return _abcCorpEntities.SaveChanges() > 0;
        }

        /// <summary>
        /// Cập nhập thông tin đơn hàng dựa vào mã đơn hàng
        /// </summary>
        /// <param name="status">Thông tin mới cần cập nhập</param>
        /// <param name="id">Mã đơn hàng muốn cập nhập</param>
        public bool UpdateOrder(int id, bool status)                                
        {
            var orderinfo = from ord in _abcCorpEntities.Orders.Where(o => o.OrderID.Equals(id))
                        select ord;
            var order = orderinfo.SingleOrDefault();
            if (order == null) return false;
            order.Status = status;
            return _abcCorpEntities.SaveChanges() > 0;
        }
        
        /// <summary>
        /// Lay danh sach cac order ma khach hang da dat
        /// </summary>
        /// <param name="customerid">Ma khach hang</param>
        /// <returns></returns>
        public IList<OrderDto> GetOrderDetailsOfCustomer(int customerid)
        {
            IList<OrderDto> lstOrder =  new List<OrderDto>();
            var orderinfo = from ord in _abcCorpEntities.Orders.Where(o => o.AccountID.Equals(customerid))
                             select ord;
            if (orderinfo.FirstOrDefault() == null) return null;
            foreach (var order in orderinfo)
            {
                var orderDto = new OrderDto();
                CopyObject<Order, OrderDto>.CopyProperties(order, orderDto);
                lstOrder.Add(orderDto);
            }
            return lstOrder;
        }

        #endregion
    }
}
